package com.admin.service;

import java.util.List;
import java.util.Map;
import java.util.Set;

import com.admin.domain.MenuDO;
import com.admin.vo.PageVO;
import com.admin.vo.ResultVO;
import com.admin.vo.SimpleResultVO;
import com.admin.vo.system.ListMenuListVO;
import com.admin.vo.system.MenuSelectedVO;

/**
 * 菜单Service
 * 
 * @author ZY
 * @date 2018/09/30
 */
public interface MenuService extends BaseService<MenuDO> {

    /**
     * 
     * @param menuIds
     * @return
     */
    public SimpleResultVO deleteByPrimaryKeys(List<Long> menuIds);

    /**
     * 
     * @param menuId
     * @return
     */
    public SimpleResultVO deleteByPrimaryKey(Long menuId);

    /**
     * 菜单列表
     * 
     * @param pageIndex
     * @param pageSize
     * @param params
     * @return
     */
    public ResultVO<PageVO<ListMenuListVO>> getMenuVOs(Integer pageIndex, Integer pageSize, Map<String, Object> params);

    /**
     * 查供筛选的菜单
     * 
     * @return
     */
    public ResultVO<List<MenuSelectedVO>> getSelectMenus();


    /**
     * 根据等级选择 权限
     * @param level
     * @return
     */
    List<MenuSelectedVO> selectMenus(String level);


    /**
     * 查供筛选的菜单
     * 
     * @param roleId
     * @return
     */
    public ResultVO<List<MenuSelectedVO>> getSelectMenus(Long roleId);

    /**
     * 保存菜单
     * 
     * @param menuDO
     * @return
     */
    public SimpleResultVO saveMenuDO(MenuDO menuDO);

    /**
     * 修改菜单
     * 
     * @param menuDO
     * @return
     */
    public SimpleResultVO updateMenuDO(MenuDO menuDO);

    /**
     * 查询用户权限标识
     * 
     * @param userId
     * @return
     */
    public ResultVO<List<String>> getCanSeeMenuPerms(Integer userId);

    /**
     * 递归查父id
     * 
     * @param menuIds
     * @return
     */
    public ResultVO<Set<Long>> getParentIds(List<Long> menuIds);


    List<String> getPermissionsModule(Integer userId);
}
